package cn.lxh.config;

import cn.lxh.constants.Constants;
import cn.lxh.pojo.domain.Login;
import cn.lxh.service.ILoginService;
import cn.lxh.utils.NameUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;

import java.util.Date;


/**
 * @author lxh Create Time: 2023/12/28 12:40
 * 初始化管理员
 */
@Component // 该类交给spring来管理
// ContextRefreshedEvent表示容器启动后所有的bean都被spring管理后会触发这个事件
public class InitializationAdmin implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private ILoginService loginService;

    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 管理员是否已经存在
        Login login = loginService.getOne(new LambdaQueryWrapper<Login>()
                .eq(Login::getAdmin, true));
        // 管理员不存在就创建
        if (login == null) {
            Login admin = new Login();
            // login.setId(0L); 雪花算法, 自动生成
            admin.setUsername(Constants.Admin.ADMIN_USERNAME);
            // 加密密码
            admin.setPassword(bCryptPasswordEncoder.encode(Constants.Admin.ADMIN_PASSWORD));
            admin.setType(0);
            admin.setEnabled(true);
            admin.setAvatar(Constants.Login.HEADER_IMG);
            admin.setAdmin(true);
            admin.setNickName(NameUtil.getAdminName());
            // admin.setOpenId();
            // admin.setHxId("");
            // admin.setName("");
            // admin.setPhone("");
            admin.setCreateTime(new Date());
            // admin.setUpdateTime(new Date());
            admin.setDeleted(false);
            admin.setVersion(0);
            // 添加管理员
            loginService.save(admin);
        }
    }
}
